home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #14 / Monster Media No. 14 (April 1996) (Monster Media, Inc.).ISO / bbs_game / lunat41a.zip / STRUCTS.DOC < prev    next >
Text File  |  1995-10-15  |  32KB  |  573 lines

  1. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  2.  STRUCTS.DOC:  The purpose of this file is to explain the workings of the
  3.                player files, and IGM inclusion, for 3rd Party Support
  4. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  5.   FOR USE WITH LUNATIX 2.3A or NEWER ONLY!
  6. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  7.   This revision to STRUCTS.DOC: 9-13-95
  8. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  9.  
  10. Headings to search for:
  11.  
  12. IGM INFORMATION : Info about data files, etc, for IGM Authors
  13. IGS SCRIPT INFO : Info about how to create an IGS script Story for Lunatix
  14. ALTERNATE ROOMS : Info about how to change the "look" of the Lunatix rooms
  15.  
  16.  
  17. ----------------
  18. IGM INFORMATION:
  19. ----------------
  20.  
  21. This document is not designed to teach you how to program, or to explain the
  22. process involved in writing a door game (IGM's are, after all, door games
  23. themselves that just happen to read data from another door game).  If you
  24. plan to write an IGM, a good knowledge of door programming is assumed.  The
  25. purpose of STRUCTS.DOC is to explain what files you need to read and how
  26. they're structed, so that an IGM you create can fit into Lunatix.
  27.  
  28. If you are a good programmer but haven't tried door programming, you should
  29. get a good Door library for whatever language you plan to use.  I use
  30. QBSerial 3.20 by Jeff Sumberg, which is for QuickBASIC 4.x, Visual Basic for
  31. DOS, and some other DOS Basics.  It is a wonderful tool.  I'm also told that
  32. "DDPlus" is available for Pascal programmers, which also includes methods
  33. to read drop files and so on (plus Pascal does ANSI without the hastle of
  34. "emulating" the way I have to do in QB).  Door routines for C++ may also be
  35. available.  QBSER320.ZIP is availabe on The Rolling Eye.
  36.  
  37. Your IGM will need to begin by reading two files.  The naming conventions
  38. are MODEM.CFG and LUNATIX.CFG for node 0, or for nodes other than 0, it
  39. will be MODEM.X and LUNATIX.X where X=NodeNum (such as LUNATIX.5). Note:
  40. Do NOT read from a Drop file... MODEM.X is there in case the drop file
  41. gets overwritten by another user.
  42.  
  43. For Simplicity, these files will be referred to as LUNATIX.CFG and MODEM.CFG
  44. although it should be understood that for nodes other than 0, it will be
  45. LUNATIX.X and MODEM.X.  Your IGM should probably be made to accept a NODE
  46. number on the command line, such as MYIGM.EXE N1 for node 1.
  47.  
  48. LUNATIX.CFG is Random Access, 80 characters per record.  It should be in
  49. the default directory. It has the following Format, record by record:
  50.  
  51. Format     Meaning   (RANDOM ACCESS, 80 CHARS per record)
  52. ----------------------------------------------------------------------------
  53. String     Name of the Clinic (Imenz Aine was the default)
  54. String     Full Path and Name of Todays News file
  55. String     Full Path and Name of Yesterday's News file
  56. ##         Max Closet fights allowed per day
  57. #          Max Player fights allowed per day
  58. String     Full Path to Lunatix's master node (I.E. \LUNATIX\)
  59.  
  60.  
  61. MODEM.CFG is a Sequential Access file, read it in line by line:
  62.  
  63. LINE #     Meaning  (#10 added in 2.4b+, #11-12-2.5a+, #13-3.0b+)
  64. ----------------------------------------------------------------------------
  65. 1          User's Real name (for use in finding Alias in NAMELIST.DAT)
  66. 2          Port% - The Com Port #, or 0 for Local
  67. 3          Irq% - An IRQ value, Value of 0 means 'use default for the port'
  68. 4          Length% - In an 'N81' string, the 8 (sometimes 7)
  69. 5          Parity% - 2=Even, 1=Odd, 0=None
  70. 6          DATA Bits% - In an 'N81' string, the 1 (sometimes 2)
  71. 7          Original Baud-Rate&, as reported in the drop file
  72. 8          Handshake% - 0=None, 1=XON/XOFF, 2=RTS/CTS, 3=Both
  73. 9          FOSSIL% - 1=Fossil driver in use, 0=User internal routines
  74. 10         Lunatix Baud-Rate& - Value, or 0 means "use current set rate"
  75. 11         Record Number (A player's record-num as entered in PLAYERS.DAT)
  76. 12         Alias Name (Their player-name as used in Players.Dat)
  77. 13         Slicing Mode (0 = Time Slicing disabled, 1 = slicing enabled)
  78.  
  79. Here are a few points you need to know when having your IGM initiate modem
  80. setup commands.  Line #7 is the Baud rate that Lunatix reads from whatever
  81. BBS Drop file is in use, and I've found that it's not always completely
  82. accurate.  Sometimes if the BBS is running with a Fossil it might say
  83. 38400... sometimes because the modem wasn't set up with a "W2" in the init
  84. string.  The second Baud rate that is reported, line 10, is the rate that
  85. Lunatix is running.  If this line is "0" then Lunatix is not messing with
  86. the rate, it just leaves it at whatever speed it was set when it gets control.
  87. If this rate = Line 7, then that's the rate in use.  If this line is a non-
  88. zero value and the FOSSIL mode is active, then line 10 will be the speed that
  89. the FOSSIL should be initialized at.  Remember, if your IGM messes up the
  90. baud rate and Lunatix has been set up with a "locked baud" option in the
  91. install, then Lunatix will also run (when returned to from the IGM) with the
  92. wrong baud rate.  So be sure... and if you have any questions PLEASE ask me
  93. so we can be sure your IGM handles this correctly. :)
  94.  
  95. As of version 3.0b, Lunatix is attempting to give "time slices" to the
  96. system, for a multi-tasking environment such as OS2, Windows, or DesqView.
  97. Line #13 in the Modem.CFG file has been added so if your IGM has time
  98. slicing routines, you can easily find out whether or not the sysop wishes
  99. to use them for his/her system, as slicing slows down things and should be
  100. avoided if it isn't needed.
  101.  
  102. --------- Player Data Files ----------
  103.  
  104. NAMELIST.DAT has a line-entry format of Real Name ~Alias Name.
  105. Read this file, searching for Real Name to get the Player's Alias:
  106. A sample NAMELIST.DAT might look like:
  107.  
  108. Sysop ~`%T`9imelor`%D
  109. Bill Smith ~Superman
  110. Jane Doe ~Wonder Woman
  111. John Doe ~Batman
  112. George The King ~`4SpiderMan
  113.  
  114. (Note, you might not have to read the NAMELIST.DAT now that the MODEM.CFG
  115. reports the real name, player name, and record number).
  116.  
  117. The Alias name is then used in PLAYERS.DAT, which is a random-access file
  118. with 240 characters per record.  The 240 characters must be broken down
  119. by the program and interpreted.  This will be in the MASTER LUNATIX
  120. directory.  Note, your IGM must preserve all the info here... even though
  121. parts of the last 132 characters aren't in use, be sure to preserve it since
  122. it is there for future expansion by me.
  123.  
  124. COUNT      MEANING             NOTES
  125. ----------------------------------------------------------------------------
  126.    15      Alias$              Used to look up the person's record
  127.     8      Money$              How many Crazy Bucks are on-hand
  128.     8      Stash$              How many Crazy Bucks are in the stash
  129.     1      Sex$                M for Male and F for Female
  130.     4      CurCode$            Current Escape Code, I.E. 0110
  131.    20      NotAgain$           This will be explained below
  132.     1      Weapon$             A to L... which weapon is in hand
  133.     1      Defense$            A to L... which defense is in hand
  134.     8      Hit$                How many Hit Points a player has
  135.     8      Exp$                How many experience points a player has
  136.     2      Level               1 to 12, Player's skill level
  137.    10      LastPlay$           Date of last play, in the form MM/DD/YYYY
  138.     2      ClosFig$            Closet fights remaining
  139.     1      PlayFig$            Player Fights Remaining
  140.     3      PlayKill$           Count of Player Kills
  141.    10      GuardNam$           The name of the Player's guard
  142.     8      PayGuard$           How much the guard accepted as a bribe
  143.   130      Rest$               Remaining section RESERVED. Preserve it.
  144.  
  145. ----------------------------------------------------------------------------
  146.  
  147. The NotAgain$ can be broken down into its composite components also:
  148.  
  149. COUNT  MEANING                   NOTES
  150. ----------------------------------------------------------------------------
  151.     1  Can Attempt Escape        Space=Yes, Non-Space = No
  152.     1  Is player Alive           Space=Yes, ^=No, #=Will be alive tomorrow
  153.     1  Can "Do something Crazy"  Space=Yes, Non-Space = No
  154.     1  Has Unfair Advantage      Space=No, Non-Space = Yes
  155.     1  Can Flirt with Nurse      Space=Yes, Non-Space = No
  156.     1  Next Available Flirt      1 to 6
  157.     3  Times Laid                Three-Digit Bedpost Notches
  158.     1  Days since Last Play      0 to 9 days since last play
  159.     1  Times Escaped             How many times at level-12 (won)
  160.     1  Can Play Prank            Space=Yes, Non-Space = no
  161.     1  Is "Awake" on a node      Space=No,  Non-Space = Yes
  162.     1  Can "Be a Nuisance"       Space=Yes, Non-Space = no
  163.     1  Has looked at map         Space=No,  Non-Space = Yes
  164.     3  Guessed codes count       How many times to guess the right passcode
  165.     1  Looked in Trash Can (IGM) Space=No, Non-Space = Yes
  166.     1  Reserved                  always a "|" ending symbol
  167.  
  168.  ------------------------------------------------------------------------
  169.  
  170. Portions of the 130-character Rest$, as of this structs.doc, are used for:
  171.  
  172. START    COUNT  MEANING              
  173. ----------------------------------------------------------------------------
  174.    1       1 : Right-Half of "day" Statue was last looked at (Widow's Lair)
  175.    2       5 : Statue's 5-letter Code (Widow's Lair)
  176.    7       1 : Is the Right (Widow's) door open? Space=NO, Non-Space=YES!
  177.    8       1 : Day Portion (ordered pizza last on this day) (Widow's Lair)
  178.    9       1 : "Screaming" points yet?  Day portion (Widow's Lair)
  179.   10       1 : Day Portion of guessing hall-code (Widow's Lair)
  180.   11       3 : The 3-number hall code (Widow's Lair)
  181.   14       1 : Hall door open? Space=NO, Non-Space = YES! (Widows Lair)
  182.   15       1 : Next Expected Flirt (value of 1 to 4) (Gift Shop)
  183.   16       1 : Next Expected "bad" gift (1 to 4) (Gift Shop)
  184.   17       1 : day portion of last "gift" bought (Gift Shop)
  185.   18       1 : A player's "Popularity" points (Value= 0 to 9) (Gift Shop)
  186.   19:      1 : Day portion of Last Glitch-Talk (Gift Shop)
  187.   20:      1 : Intelligence points (Value= 0 to 9) (Gift Shop)
  188.   21:      1 : How many chances to read a book remain (Lunatix.exe)
  189.  
  190. Note: Some parts of the Rest$ are referred to by "day portion"... this is
  191. the last digit of the day of the month... 01 to 31 truncates the left char
  192. and it'd be 1 for the 1st, 5 for the 15th, 0 for the 20th, and so on.  If
  193. today's portion matches the saved portion, then they've *probably* already
  194. done that action today (not completely true but correct often enough to make
  195. it useful).
  196.  
  197.  
  198. Your IGM will read the Todays News file name from LUNATIX.CFG (line 2).
  199. You may append news information to this file (it's sequential) by opening
  200. it in append mode and adding news info.  This way, your IGM can be a working
  201. part of the whole game. :)
  202.  
  203.  
  204. Your IGM may also write to the mail file.  The mail files are named
  205. MAIL.X where X is the record number of a user, as it appears in order in
  206. PLAYERS.DAT.  Whoever is Record 1 in PLAYERS.DAT has MAIL.1... whoever is
  207. record 15 has MAIL.15, for instance.  By searching for a player in the
  208. PLAYERS.DAT and noting the record number, you may add to that player's mail.
  209. Take note, a special line may be put in a player's mail file, which tells
  210. the Mail Reader that the player may respond to someone.  the format is:
  211. |A####Alias Name   where #### is the Record Number of the user that would be
  212. written back to, and the Alias Name is that player's name.  An Example is:
  213. |A2   Mr. Rogers    This means write back to player 2, who is Mr. Rogers.
  214. |A42  Santa Clause  This means write back to player 42, who is Santa Clause.
  215. The "|A" will always begin the "do you wish to respond" info line, it's
  216. important that the Alias Name begin at character 7, if you plan to write
  217. mail that gives the option of writing back to the author.  Note:  Be SURE
  218. you understand this, and that the line is a valid record number, otherwise
  219. you might cause the game to crash when a user reads the mail!
  220.  
  221. ----------------------------------------------------------------------------
  222. Your IGM should NOT change the directory.  It should open all files using
  223. a path specifier, you may need to pass the path to your IGM on the command
  224. line, in addition to the nodenumber: MYIGM.EXE N1 \NEWIGM\ (as explained
  225. later in this file, a '*' will be replaced with the NodeNum).
  226.  
  227. Lunatix files should be read from the default directory.  To read in
  228. the NAMELIST.DAT, just OPEN NAMELIST.DAT (no path).  Lunatix EXPECTS to
  229. be running from its home directory.  If not, it is the SYSOP'S fault, and
  230. not the fault of your IGM.
  231.  
  232. A file called TIMELEFT.X will also be placed into the NODE directory.
  233. When your IGM gets control, it should read Minutes from the top line and
  234. Seconds from the second line.  (Note, The .X refers to nodenum, 
  235. TIMELEFT.0 for node0, TIMELEFT.12 for Node12..) Also note, as of
  236. Lunatix 3.0c, TIMELEFT.x isn't read back in upon return, because Lunatix
  237. now has a much more accurate time-keeping method of subtracting from the
  238. system timer.  However, for compatibility with a version before 3.0c, you
  239. may still want to write the time back to the file. :)
  240.  
  241.  
  242. Your IGM should follow this general logic flow:
  243. ----------------------------------------------------------------------------
  244. Parse the command line (if you do that, and it IS the easiest way) to get
  245.       the node number and possibly other info, such as path to your IGM.
  246. Open TIMELEFT.X (where X=NodeNum)
  247.      Input Minutes and Seconds remaining, for use in your IGM.
  248.      At this point, you should probably start keeping track of the time
  249.      remaining online.
  250. Open LUNATIX.CFG
  251.      Input the info from this file, including the MASTER path (DatPath$)
  252.      However, DatPath$ may not be important since Lunatix should be defaulted
  253.      to that directory.
  254. Open MODEM.CFG
  255.      Read information concerning the modem (and user's real name).
  256. Open COM
  257.      Setup of the communications parameters based on info from MODEM.CFG
  258. Open YOUR.CFG (Skip if you won't have your own CFG data)
  259. Open NAMELIST.DAT
  260.      Look-up the Alias name for the User Name in the line format of
  261.      UserName ~AliasName
  262. Open PLAYERS.DAT
  263.      Search this random-access file, record by record, for Alias$, then
  264.      read in the information for Alias$ (user).  You may also take note
  265.      of the record number, and use this when saving progress.. put #1, NUM
  266.      for instance, where NUM=Player record number.
  267. Game Play
  268.      Your game begins at this point, after everything is set up.
  269.      Be sure to save the player record frequently (I do at each game
  270.      prompt) so if it crashes, the player won't loose any progress.
  271. Save TIMELEFT.X (Write the time back to the Time file, X=NodeNum)
  272.      Do this before your IGM releases control back to Lunatix
  273. Exit Game
  274.      any wrap-up things should happen before the IGM ends.
  275.  
  276. Take note, that Lunatix "Shells" out to your IGM.  It doesn't create a
  277. batch file that controls the program-to-program flow, it literally drops
  278. out to your IGM.  Take note of this, because this lowers the amount of
  279. RAM you'll have to play with, since Lunatix should still be sitting there
  280. in Memory (I think).
  281.  
  282. Also Note, As your IGM reads/writes to the player files (and any other
  283. really) it should open them in a SHARED mode.  If your IGM locks the file,
  284. it may lock another user.  For the PLAYERS.DAT, you will just be updating
  285. 1 record at a time anyway, not the whole file.  I have seen another
  286. alternative which is to duplicate this file and read/write to the
  287. duplicate.  I just open them as SHARED so other nodes have access.  Seems
  288. to work so far...
  289.  
  290. Your IGM should be easy to install, because all it has to do is put itself
  291. into the IGM.DAT file.  You will probably want to install it with a command
  292. line that will be passed to your IGM.  This is almost a necessity for the
  293. Node Number, as your IGM must know the NodeNum.  a '*' will be replaced by
  294. NodeNum.  An example would be:
  295.  
  296. `@My `0NEW `@IGM
  297. C:\MYNEW\NEWIGM.EXE N* C:\MYNEW\
  298.  
  299. Note: The top line is the NAME of your IGM as it appears to players, which
  300.       may include color codes.  The amount of displayable characters is
  301.       35, however it can be longer if the extra chars are color codes.
  302.  
  303.       The second line is the EXECUTABLE command line for your IGM.  Note,
  304.       in the example I passed the Node number, and the path to the IGM.
  305.  
  306. Your IGM should also include an option to UNINSTALL.  Yes, most any sysop
  307. can just EDIT the IGM.DAT and delete a couple lines to remove an IGM.  But
  308. an UNINSTALL option is really nice, and is a REQUIREMENT.  Basically, to
  309. Uninstall, you just read the IGM.DAT, writing every line that ISN'T from
  310. your IGM to another file, then copy that temp file over the IGM.DAT file.
  311.  
  312.  
  313. =-=-=-=-=-=-=-=-=-=-=-=-=-=  SPECIAL NOTICE  =-=-=-=-=-=-=-=-=-=-=-=-=-=
  314. Your IGM must meet these requirements to be released as a Lunatix IGM:
  315. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=
  316. 1)  It must be structed (reading setup) as described above
  317. 2)  It must read from TIMELEFT.X and maintain the time remaining
  318. 3)  It must write to TIMELEFT.X upon completion
  319. 4)  It must be relatively easy to install
  320. 5)  It must include an UNINSTALL option
  321. 6)  If you charge for your IGM, please don't charge more than $20, which
  322.     is the cost of Lunatix itself.
  323. 7)  You MUST (and this is the most important part) upload a copy of your
  324.     IGM to us (405-924-7939) BEFORE you release it, and it must be
  325.     approved by us.  This is an attempt at quality control, and any IGM's
  326.     released without our prior approval will be considered Illegal IGM's.
  327.     We will try not to veto an IGM, although if it seriously sucks we might
  328.     have to suggest some changes before we okay its release.
  329. 8)  It should ONLY be called from the Elevator in Lunatix, not as a
  330.     pre-play module.  Anything not fitting the requirements of an IGM
  331.     should be called "Add-Ons" and also must be approved by us.
  332. 9)  Your IGM must in some way give credit to me, Mike Snyder, for writing
  333.     Lunatix.  However, I expect absolutely NO payment whatsoever from any
  334.     money your IGM earns.  Good luck, your profit is yours.
  335. 10) Your IGM must, to some extent, be humorous.  You don't have the follow
  336.     the menu-driven format that Lunatix presents, you are free to be
  337.     original.  Just... try to create something that people will LIKE!
  338. 11) Your IGM must NOT bypass the built-in registration check in Lunatix,
  339.     or offer any of the unregister-blocked features.  This means your IGM
  340.     may NOT allow a player to go past level 5, although it may add to his
  341.     experience. (If the game isn't registered, level 5 is the top, no matter
  342.     how much experience).  Your IGM may NOT allow name changes.  Also, your
  343.     IGM may NOT add interest to the stash, although you can create your own
  344.     means of earning Crazy Bucks.  Sorry, this is to insure that IGM's don't
  345.     do away with the "incentive" to register Lunatix.
  346. 12) Your IGM cannot purposely corrupt the Lunatix Player files, Data files,
  347.     or in away find, read, or process the registration key.  With respect
  348.     to the last part, the author of any IGM which tampers with the reg. codes
  349.     will face very serious legal consequences.
  350.  
  351. If your IGM meets these requirements, and we approve it, we will add it
  352. to an IGM list which will be available with new releases of Lunatix,
  353. Time Port, and other doors we will release.
  354.  
  355. Reference:  Use this information when designing your IGM, if you plan to add
  356. to the player's experience points or Crazy Bucks, or plan to have fighting
  357. routines.  This is how Lunatix is set.  When giving Crazy Bucks or Experience,
  358. you may want to give less, otherwise if a ton of IGM's eventually develop,
  359. a player could play them all and go up a couple of levels each day. :(  So
  360. keep that in mind.  For instance, all money or experience given in Lunatix
  361. uses a base number, which is the MAXIMUM that would be given if a player
  362. killed a closet shadow at level X (1 to 12).  A portion of this is used to
  363. calculate a fair value.  For instance, the maximum Crazy Bucks given by
  364. killing a level 3 shadow is 200.  So if a player does something special in
  365. your IGM, for instance, you can use that value and the level to award
  366. experience points.  If the level is 3, you might take a random value to
  367. award, up to 200 * 4 (200 is MaxPerShadowExper for level 3, and the
  368. "special" event might be worth 4 shadows for instance.  Same for Crazy Bucks.
  369. In this case, you might choose a RANDOM value from 25% - 100% of 800.
  370.  
  371. Below is a chart of the MAX amount of Money or Experience for each shadow.
  372. Keep in mind that fewer than the max is usually awarded for a kill.  Also
  373. shown are default Weapon/Defense costs, Max-Hits per level, and experience
  374. needed to beat the cafeteria lady at each level.
  375. -------------------------------+----------------------------------
  376.              Per-Monster Max's |  Level values for Hits,Cost,Exp
  377. -------------------------------+----------------------------------
  378.  Player Lev.   Money  Experience  Max-Hits   W/D Costs   Exp^
  379. -------------------------------+----------------------------------
  380.  Level 1:        15       10   |    20          50       300
  381.  Level 2:       100       75   |    30         500      3000
  382.  Level 3:       400      200   |    40        4000     10000
  383.  Level 4:       950      425   |    60       11000     25000
  384.  Level 5:      2000     1000   |    80       30000     60000
  385.  Level 6:      6000     3500   |   100      100000    180000
  386.  Level 7:     12000     6200   |   120      200000    400000
  387.  Level 8:     25000    11500   |   140      400000    800000
  388.  Level 9:     75000    20000   |   200      800000   1500000
  389.  Level 10:   200000    43000   |   300     3600000   3000000
  390.  Level 11:   400000    85000   |   450     8000000   6000000
  391.  Level 12:   600000   120000   |   700    20000000    Can't!
  392. -------------------------------+----------------------------------
  393.  
  394. Once again, award money and experience in moderation, or at least make the
  395. player work for it.  Otherwise people will go up too quickly. :)  What I
  396. tend to do is give "alternate" ways of earning money/experience... and it
  397. could cost a closet fight.  So the "flow" of things would go along normally
  398. if you take away a closet fight for the "things" players do in your IGM, and
  399. award about the same amount of money/experience that would be gained from a
  400. Closet Fight at the same level.
  401.  
  402. ----------------------------------------------------------------------------
  403.  --  ONTHEFLY.X (Added to Lunatix verison 2.5a and newer)
  404. Using a player's record number, your IGM can write to onthefly.<playernum>
  405. Which Lunatix uses to "notify" a player of action in an IGM.  For example,
  406. my Chat Room IGM has a /PAGE option, which writes to the "onthefly" file
  407. so a player will be notified to go to the Chat IGM to talk.  This is just
  408. a sequential file... open it and append to the end.  Lunatix handles it
  409. from there.
  410.  
  411. If you have any questions, or discover that this document is incomplete,
  412. please let me know right away.  Thanks.
  413.  
  414. Your IGM should state that it is only compatible with Lunatix 2.3a or newer.
  415. If you use the additional lines (after 9) that were added to MODEM.CFG in
  416. later version, you should also note that your IGM/Addon only works with that
  417. version or newer.
  418.  
  419. ------- Addition to version 3.0A ---------- "Stay" in an IGM -----------
  420.  
  421. Ed Mullins of Mullins Software suggested that I allow players to "sleep" or
  422. whatever in an IGM, and Lunatix 2.5b is released with this feature.  This
  423. works really simple.  Now when Lunatix goes to an IGM it create a file called
  424. IGMOUT.<player-number> that has 3 lines.  The first line is the name of the
  425. IGM as it appears in the Elevator listing.  The second line is the command
  426. line to the IGM (also from IGM.DAT).  The 3rd line will say "Continue" which
  427. tells Lunatix that when it regains control, the game should continue.  An
  428. example might be.. for player 18 (remember, the order is based on the order
  429. is Players.dat)..
  430.  
  431.                    IGMOUT.18
  432.                    ---------
  433.                    `4S`7ome kind of `@IGM!
  434.                    C:\IGMS\SOMEIGM.EXE /n* c:\lunatix\
  435.                    Continue
  436.  
  437. Okay, if you want a player to have the ability to "stay" in your IGM, just
  438. change the last line to anything besides Continue.  In the "players online"
  439. listing, this 3rd line will be used to tell that your user is in the IGM.
  440. If Line-3 says "is soundly asleep at the Lunatix Inn" then in the WHERE-IS
  441. option it'd say "Beavis is soundly asleep at the Lunatix Inn"... You could
  442. make the 3rd line same something like... (some examples)
  443.  
  444.   is being held captive by Spartacus's Mom
  445.   `6tripped, fell, and went to sleep in the `$Basement.
  446.   is hybernating in the Big Bear's IGM.
  447.  
  448. If you do that, just be sure you realize that a player can't be attacked while
  449. staying in your IGM... so it shouldn't be made as just a way to "dodge" an
  450. attack.  You can figure all that out.
  451.  
  452. You might also want to alter line #2 with another perameter.  Your IGM might
  453. look for "/Wake" when it starts (like the node-number thing) and if it's
  454. there, it knows the player should enter the IGM as if they just woke up.  But
  455. when you change line #2, and the player "returns" to the IGM the next day,
  456. that extra perameter will be on the command line in IGMOUT, so if you add
  457. to line 2, be sure your IGM will search for it so if the player goes to sleep
  458. again, it won't recursively add the perameter to that line.  I hope I made
  459. sense there.  Remember, the IGMOUT file only exists with version 2.5b and
  460. newer. :)
  461.  
  462. Note, when a player "stays" in the IGM, their "online" status (character 13
  463. in the NotAgain$ as described much earlier in this document) is set to on.
  464. However, it will have a value of "@" which means the player isn't actually
  465. "online", they're offline but in the IGM.  Your IGM might use this variable
  466. if you need to know which players are playing, which are not, and which are
  467. asleep in an IGM. :)
  468.  
  469. Here is an idea I might work on for an IGM, but everyone else is free to
  470. as well.  Have the player get "captured" somehow in the IGM, and it lasts
  471. for 24 hours... use the command-line thing I talked about to say /PRISONER
  472. or something so your IGM knows if they try to play they're a prisoner and
  473. to go accordingly.  Then, another player could go to the IGM and rescue them.
  474. That's just one idea, I'm sure all the talented programmers out there can
  475. think of lots of cool things for this option. :)
  476.  
  477. ----------------
  478. ALTERNATE ROOMS:
  479. ----------------
  480.  
  481. ---- Another addition to version 3.0A ------ Change the ROOM descripts -----
  482.  
  483. This is another really cool feature I have implemented in version 3.0a.  If
  484. Lunatix finds ROOMx.TXT files, it will use them instead of its own room
  485. description.  However, there are some rooms that should *NOT* have an
  486. external description (Luckily, Lunatix won't read them, hehehe).  For example,
  487. ROOM1.TXT is the Players' "bedroom".  Here is a listing:
  488.  
  489.     1: The Player's Own Room            2: Inside the Closet
  490.     3: Out in the Hallway               4: In the Cafeteria
  491.     5: Talking to Socrates (Buy/Sell)   7: Socrate's Weapon List
  492.     8: Napoleon's Defense List          9: Talking to Napoleon
  493.    11: Einstien Heals You              13: Inside another Player's Room
  494.    15: Female Nurse in the Hall        16: Flirting with Female Nurse
  495.    17: Playing a Prank on somebody     18: Inside the Elevator
  496.    19: Male Nurse in the Hall          20: Flirting with Male Nurse
  497.    21: In The Library
  498.  
  499. Note: By "room description" I mean, the entire room; text, menu and all.
  500.  
  501. Remember a few things if you design "other" room descriptions for Lunatix.
  502. You could write a program that reads IGM.DAT to create Room18 (in fact, that
  503. is really the only way for room 18 or 21).  For a sample of a "fantasy"
  504. room, check out the file ROOM99.TXT and you'll see an example.  If you wish,
  505. copy it to ROOM1.TXT and run Lunatix... just remember that the '*' key is
  506. to exit, because room99.txt doesn't show a real menu. :)
  507.  
  508. As of version 3.1a, Lunatix also has RIP support.  The room format listed
  509. above works the same for ROOMx.RIP screens.  For my own RIP screens (3.1a
  510. only has the first 4 rooms RIPped) I include an <ESC> sequence at the end
  511. of the RIP file to locate the cursor to the bottom of the RIP screen.  Anyone
  512. designing RIP rooms should keep that in mind, or use the RIP commands for
  513. set
  514.  
  515.  
  516. ----------------
  517. IGS SCRIPT INFO:
  518. ----------------
  519.  
  520. ---- An addition to version 3.1A ------ IGS "Script" Support added ----
  521.  
  522.     In Version 3.1a, I have added something I call an "IGS" which is kind
  523. of like an IGM, only it's an "In-Game Story."  This is like the old Choose
  524. Your Own Adventure books many of us have seen at one time or another.  You
  525. read a section of the story, and make choices about what section to read
  526. next.  Well, Lunatix now supports this, and there's a Library room now where
  527. IGS's are read (as opposed to the Elevator for IGM's).  An IGS installs the
  528. same way as IGM's -- except the data file is called BOOKS.DAT instead of
  529. IGM.DAT.  The first line is a title (color codes can be used) and the second
  530. line is the data file name.  An example section of BOOKS.DAT would be:
  531.              
  532.              `5My `#Own `8IGS `7Story
  533.              C:\IGS\MYSTORY.TXT
  534.  
  535. After understanding the format of an IGS script, anyone can write one.  No
  536. programming skill of any kind is necessary.  This should allow everyone who
  537. has ever wanted to write an "IGM" do so -- in a small way -- by creating an
  538. IGS instead.  Your IGS is simply a text file with embedded commands to
  539. control the IGS Script flow.  Commands and Lables begin the a "%" sign.  If
  540. it isn't a built-in command, then it will be interpreted as a label.  Labels
  541. and commands must be the first and only thing on the line.
  542.  
  543.    %CLS - clears the screen
  544.    %KEY - Asks the user to press a key, then clears the screen
  545.    %ESC - Exits back to the command Processor
  546.    %COM - Initialize choices.  The %COM is followed by a space and then
  547.           a number, representing the number of available commands.  On the
  548.           next lines, labels must be given (without the % sign, though) to
  549.           specify which section to read next if the user presses that
  550.           command.
  551.  
  552. The beginning of the IGS Script should be the first page -- no label should
  553. be given for it.  Note, if a label comes before an %ESC statement, then it
  554. will be treated as text and printed.  Any %CLS or %KEY outside a page block
  555. will not be used.
  556.  
  557.    For a more detailed example, see the "2CRAZIES.TXT" file.  It makes use
  558. of these commands, and maybe a quick look would help you understand it.
  559.  
  560. I will also create an IGS-K*.ZIP which will be an IGS Kit, that will include
  561. a "viewer" for "playing back" and testing your IGS, as well as a generic
  562. Install program that you can distribute with your IGS.  However, as long as
  563. you include some kind of documentation about how to edit the BOOKS.DAT
  564. file to add or remove your IGS, an install program isn't mandatory
  565.  
  566. I am not going to approve/disapprove the IGS's as I will the IGM's and any
  567. Add-Ons.  I'm hoping that the IGS concept will catch on and there will be
  568. tons of these interactive stories for Lunatix -- I think it would greatly
  569. improve the game.  All I *DO* ask is that you test your IGS and make sure
  570. it is complete and works (no bugs, I mean).  Good Luck, and I would love to
  571. see any IGS's uploaded to my board... I'll put the good ones into my own
  572. online game so my own players can read them. :)
  573.